﻿// ConsoleApplication9.cpp : Defines the entry point for the console application.
/*
Scrivere un programma che, con un menu, e attraverso le varie funzioni e procedure, permetta di:

1) Acquisizione: che acquisisce in input il nome e il cognome, ciascuno di 20 caratteri;
Il programma visualizza il messaggio di errore e chiede il reinserimento dei dati se 
nome e cognome sono uguali e se sono inferiori a 5 caratteri

2) Genera mail: che genera l'indirizzo email nella forma: nome.cognome@keynes.it

3) Genera password: che utilizza i primi 4 caratteri del nome, seguiti da un numero da 0 a 9 random,
seguiti dagli ultimi 4 caratteri del cognome

4) Codifica password: costruisce una password che per ogni vocale della password di partenza 
venga preceduta da # e seguita da !, e che ogni carattere b,c,t,q sia sostituito da @

5) Visualizza: che visualizza tutto
*/

#include <iostream>
#include <string>
#include <time.h>
#define NOMELEN 20
#define EMAILEN 51
#define PASSLEN 10
using namespace std;

void menu();
void acquisisci(char nome[], char cognome[]);
void generamail(char nome[], char cognome[], char email[]);
void generapass(char nome[], char cognome[], char password[]);
void codificapass(char password[], char passcode[]);
void visualizza(char nome[], char cognome[], char email[], char passcode[]);

int main()
{
	srand(time(NULL));
	menu();
	system("pause");
    return 0;
}

void menu()
{
	int scelta;
	char nome[NOMELEN + 1];
	char cognome[NOMELEN + 1];
	char email[EMAILEN + 1];
	char password[PASSLEN+1];
	char passcode[3*PASSLEN+1];
	do
	{
		system("cls");
		printf("1. Acquisisci\n");
		printf("2. Genera email\n");
		printf("3. Genera password\n");
		printf("4. Codifica password\n");
		printf("5. Visualizza");
		cin >> scelta;
		switch (scelta)
		{
		case 1:
			acquisisci(nome, cognome);
			break;
		case 2:
			generamail(nome, cognome, email);
			break;
		case 3:
			generapass(nome, cognome, password);
			break;
		case 4:
			codificapass(password, passcode);
			break;
		case 5:
			visualizza(nome, cognome, email, passcode);
		}
	} while (scelta != 0);
	nome[strlen(nome)] = '\0';
	cognome[strlen(cognome)] = '\0';
}

void acquisisci(char nome[], char cognome[])
{
	do
	{
		printf("Nome:\n");
		cin >> nome;
		printf("Cognome:\n");
		cin >> cognome;
	} while ((strcmp(nome, cognome)==0) || ((strlen(nome) < 5) || (strlen(cognome) < 5)));
	nome[strlen(nome)] = '\0';
	cognome[strlen(cognome)] = '\0';
}
void generamail(char nome[], char cognome[], char email[])
{
	strcpy_s(email, EMAILEN +1, nome);
	strcat_s(email, EMAILEN + 1, ".");
	strcat_s(email, EMAILEN + 1, cognome);
	strcat_s(email, EMAILEN + 1, "@keynes.it");
	email[strlen(email)] = '\0';
}

void generapass(char nome[], char cognome[], char password[])
{
	int j = strlen(cognome) - 4;
	char rd[2];
	char cognome2[NOMELEN+1];
	rd[0] = (char) 48+rand() % 9;
	rd[1] = '\0';
	strncpy_s(password, PASSLEN+1, nome, 4);
	strcat_s(password, PASSLEN + 1, rd);
	for (int i = 0; i < 4; i++)
	{
		cognome2[i] = cognome[j];
		j++;
	}
	cognome2[j-1] = '\0';
	strcat_s(password, PASSLEN + 1, cognome2);
	password[strlen(password)] = '\0';
	system("pause");
}

void codificapass(char password[], char passcode[])
{
	int vocali=0;
	for (int j = 0; j < strlen(password)+vocali; j++)
	{
		switch (password[j])
		{
		case 'A':
		case 'a':
		case 'E':
		case 'e':
		case 'I':
		case 'i':
		case 'O':
		case 'o':
		case 'U':
		case 'u':
			passcode[j] = '#';
			passcode[j+1] = password[j];
			passcode[j+2] = '!';
			j++;
			vocali++;
			break;
		case 'B':
		case 'b':
		case 'C':
		case 'c':
		case 'Q':
		case 'q':
		case 'T':
		case 't':
			passcode[j] = '@';
			break;
		default:
			if((passcode[j]!='!') && (passcode[j]!='#'))
			passcode[j] = password[j];
			break;
		}
	}
	passcode[2*vocali+strlen(password)] = '\0';
	system("pause");
}

void visualizza(char nome[], char cognome[], char email[], char passcode[])
{
	printf("Nome:%s\tLunghezza: %d\nCognome:%s \tLunghezza: %d\nPassword: %s\tLunghezza: %d\n", nome, strlen(nome), cognome, strlen(cognome), passcode, strlen(passcode));
	system("pause");
}